home *** CD-ROM | disk | FTP | other *** search
- static char checkdate_prog[] = "@(#)Testung auf gültiges Datum";
- static char checkdate_ver[] = "@(#)ver 1.20/kr ; 14.05.91";
- /* checkdate Funktion testet auf gültigen Datum-String
- **
- ** Autor Klaus Rath
- **
- ** Deklaration
- **
- ** Übergabe Die Funktion erwartet einen String in einem der folgenden
- ** Formate :
- ** tt.mm.[jj]jj -- Deutsches Format (format: 1,2)
- ** mm/tt/[jj]jj -- Amerikanisches Format (format: 3,4)
- ** [jj]jjmmtt -- Datenbankformat DDB/4 (format: 5,6)
- ** tt.mm. | mm/tt -- Kurzformat deutsch/am. (format: 7,8)
- ** Rückgabe int [format|FALSE] wobei z.Zt. 1 <= format <=8
- **
- ** Anmerkungen Die Funktion berücksichtigt vollständig Schaltjahre - durch
- ** Aufruf der Funktion 'int schalt_jahr(int jahr)', die dem-
- ** entsprechend mit eingebunden werden muß.
- ** Sollte kein Jahrhundert im Übergabestring angegeben worden
- ** sein, ermittelt die Funktion das Default-Jahrhundert aus
- ** der Systemzeit !
- ** Entsprechendes gilt, falls auch kein Jahr vorhanden ist.
- ** Der Bereich, in dem checkdate arbeiten kann, liegt
- ** zwischen dem 01.01.0000 und dem 31.12.9999 !!!
- ** Änderungen 1.10 ; 13.04.91
- ** Die Funktion gibt jetzt den Format-Typ des übergebenen
- ** Datums-String zurück. Werte siehe datum.h !
- ** 1.20 ; 14.05.91
- ** Neue Formate 7 und 8 eingebaut.
- */
-
- #include <stdio.h>
- #include <string.h>
- #include <time.h>
- #ifdef __TURBOC__
- #define ANSI
- #define MSDOS
- #include <stdlib.h>
- #include <sys\types.h>
- #else
- #include <sys/types.h>
- #endif
- #include "datum.h"
-
- #ifdef ANSI
- int checkdate(char *dstring)
- #else
- int checkdate(dstring)
- char *dstring;
- #endif
- {
- char tag_s[3];
- char monat_s[3];
- char jahr_s[3];
- char jh_s[3];
- int tag_z;
- int monat_z;
- int jahr_z;
- int jh_z;
- int laenge;
- char systemzeit_s[26];
- time_t systemzeit;
- int jahreszahl;
- int format;
-
- /* Längenüberprüfung :
- */
- laenge = strlen(dstring);
- if ( laenge == 5 || laenge == 6 || laenge == 8 || laenge == 10 )
- ;
- else
- return(FALSE);
-
- /* Jahrhundert und Jahr aus der Systemzeit ermitteln und vorbelegen :
- */
- time(&systemzeit);
- strcpy(systemzeit_s,ctime(&systemzeit));
- jh_s[0] = systemzeit_s[20];
- jh_s[1] = systemzeit_s[21];
- jh_s[2] = '\0';
- jahr_s[0] = systemzeit_s[22];
- jahr_s[1] = systemzeit_s[23];
- jahr_s[2] = '\0';
-
- /* Format überprüfen und umkopieren :
- */
- if ( dstring[2] == '.' && dstring[5] == '.' ) { /* deutsches Format */
- tag_s[0] = dstring[0];
- tag_s[1] = dstring[1];
- tag_s[2] = '\0';
- monat_s[0] = dstring[3];
- monat_s[1] = dstring[4];
- monat_s[2] = '\0';
- if ( laenge == 10 ) {
- jh_s[0] = dstring[6];
- jh_s[1] = dstring[7];
- jh_s[2] = '\0';
- jahr_s[0] = dstring[8];
- jahr_s[1] = dstring[9];
- jahr_s[2] = '\0';
- format = DE_LANG;
- }
- else if ( laenge == 8 ) {
- jahr_s[0] = dstring[6];
- jahr_s[1] = dstring[7];
- jahr_s[2] = '\0';
- format = DE_KURZ;
- }
- else if ( laenge == 6 ) {
- format = DE_AKTJAHR;
- }
- else
- return(FALSE);
- } /* ENDE: Deutsches Format */
- else if ( dstring[2] == '/'
- && ( dstring[5] == '/' || laenge == 5 ) ) { /* amerik.Format */
- tag_s[0] = dstring[3];
- tag_s[1] = dstring[4];
- tag_s[2] = '\0';
- monat_s[0] = dstring[0];
- monat_s[1] = dstring[1];
- monat_s[2] = '\0';
- if ( laenge == 10 ) {
- jh_s[0] = dstring[6];
- jh_s[1] = dstring[7];
- jh_s[2] = '\0';
- jahr_s[0] = dstring[8];
- jahr_s[1] = dstring[9];
- jahr_s[2] = '\0';
- format = AM_LANG;
- }
- else if ( laenge == 8 ) {
- jahr_s[0] = dstring[6];
- jahr_s[1] = dstring[7];
- jahr_s[2] = '\0';
- format = AM_KURZ;
- }
- else if ( laenge == 5 ) {
- format = AM_AKTJAHR;
- }
- else
- return(FALSE);
- } /* ENDE: Amerikanisches Format */
- else if ( atol(dstring) != (long)NULL ) { /* Datenbank-Format */
- if ( laenge == 8 ) {
- jh_s[0] = dstring[0];
- jh_s[1] = dstring[1];
- jh_s[2] = '\0';
- jahr_s[0] = dstring[2];
- jahr_s[1] = dstring[3];
- jahr_s[2] = '\0';
- tag_s[0] = dstring[6];
- tag_s[1] = dstring[7];
- tag_s[2] = '\0';
- monat_s[0] = dstring[4];
- monat_s[1] = dstring[5];
- monat_s[2] = '\0';
- format = DB_LANG;
- }
- else if ( laenge == 6 ) {
- jahr_s[0] = dstring[0];
- jahr_s[1] = dstring[1];
- jahr_s[2] = '\0';
- tag_s[0] = dstring[4];
- tag_s[1] = dstring[5];
- tag_s[2] = '\0';
- monat_s[0] = dstring[2];
- monat_s[1] = dstring[3];
- monat_s[2] = '\0';
- format = DB_KURZ;
- }
- else
- return(FALSE);
- } /* ENDE: Datenbankformat */
- else
- return(FALSE);
- /* ENDE:if(Formatprüfung und Kopierung) */
-
- /* Konvertierung :
- */
- if ( ( (tag_z = atoi(tag_s)) == 0 )
- ||
- ( (monat_z = atoi(monat_s)) == 0 )
- )
- return(FALSE);
- jh_z = atoi(jh_s);
- jahr_z = atoi(jahr_s);
-
- if ( monat_z > 12 || monat_z < 0 || tag_z < 0 || jahr_z < 0 || jh_z < 0 )
- return(FALSE);
-
- switch ( monat_z ) {
- case 1 :
- case 3 :
- case 5 :
- case 7 :
- case 8 :
- case 10 :
- case 12 : if ( tag_z > 31 )
- return(FALSE);
- break;
- case 4 :
- case 6 :
- case 9 :
- case 11 : if ( tag_z > 30 )
- return(FALSE);
- break;
- case 2 : jahreszahl = jh_z*100 + jahr_z;
- if ( schalt_jahr(jahreszahl) == TRUE ) {
- if ( tag_z > 29 )
- return(FALSE);
- }
- else
- if ( tag_z > 28 )
- return(FALSE);
- break;
- } /* ENDE: switch */
-
- return(format);
- } /* ENDE: checkdate() */
-
-